package cn.edu.zafu.bigdata.bd121.im.server;

import cn.edu.zafu.bigdata.bd121.im.common.HandleMessage;
import cn.edu.zafu.bigdata.bd121.im.common.HandleUserInput;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 基于 TCP 的聊天程序
 * 要求：
 * 实现一个简单的 TCP 服务端和客户端，支持客户端发送消息给服务端，并由服务端回复消息。
 * 能够连接到同学的服务端进行通信。
 * <p>
 * 此为服务端
 * </p>
 *
 * @author 202211090121
 */
public class IMServer {

    /**
     * 服务器端口
     */
    private static final int PORT = 1221;

    /**
     * 接收消息的输入流
     */
    public static InputStreamReader in;

    /**
     * 发送消息的输出流
     */
    public static PrintWriter out;

    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(PORT)) {
            System.out.println("服务器启动，监听端口：" + PORT);
            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("客户端连接成功：" + clientSocket.getInetAddress().getHostAddress());
                Thread messageReaderThread = new Thread(new HandleMessage(clientSocket));
                messageReaderThread.start();
                HandleUserInput handleUserInput = new HandleUserInput(clientSocket);
                handleUserInput.run();
            }
        } catch (IOException e) {
            System.err.println("服务器启动失败" + e.getMessage());
            throw new RuntimeException(e);
        }
    }

}
